  using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using System.Data;

namespace Call_Center_Gochi.DAL
{
    class Conexion
    {
       
        private string strProvider = "Server=localhost;Database=gochi;Uid=root;Pwd= ;Port=3306";
        
        
        MySqlConnection objMyCon;
        
        public Conexion()
        {
            objMyCon = new MySqlConnection(strProvider);
        }
        
        public Boolean AbrirConexion()
        {
            try
            {
                objMyCon.Open();
                return true;
            }
            catch (Exception e)
            {
                return false;
            }

        }

        public Boolean CerrarConexion()
        {
            try
            {
                objMyCon.Close();
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public String[] Login(String Usuario, String Password)
        {
            String[] Acceso = new String[3];
            this.AbrirConexion();
            string sql = "SELECT idUsuario, Nombre, Tipo FROM usuario WHERE Nombre = @Usuario and Contraseña = @Password and Estado_idEstado = '1'";
            MySqlCommand cmd = new MySqlCommand(sql, objMyCon);
            cmd.Parameters.AddWithValue("@Usuario", Usuario);
            cmd.Parameters.AddWithValue("@Password", Password);

            MySqlDataReader dataReader = cmd.ExecuteReader();

            while (dataReader.Read())
            {
                Acceso[0] = "" + dataReader["Nombre"];
                Acceso[1] = "" + dataReader["Tipo"];
                Acceso[2] = "" + dataReader["idUsuario"];
            }

            dataReader.Close();
            this.CerrarConexion();
            return Acceso;
        }

        public List<String> TipoCliente()
        {
            List<String> DocIdentidad = new List<string>();
            this.AbrirConexion();

            string sql = "SELECT * FROM  tipo_cliente where estado_idEstado = '1'";
            MySqlCommand cmd = new MySqlCommand(sql, objMyCon);
            MySqlDataReader dataReader = cmd.ExecuteReader();

            while (dataReader.Read())
            {
                DocIdentidad.Add("" + dataReader["Descripcion"]);
            }

            this.CerrarConexion();

            return DocIdentidad;
        }
        
        public List<String> Usuarios()
        {
            List<String> Usuario = new List<string>();
            this.AbrirConexion();

            string sql = "SELECT * FROM  usuario where estado_idEstado = '1'";
            MySqlCommand cmd = new MySqlCommand(sql, objMyCon);
            MySqlDataReader dataReader = cmd.ExecuteReader();

            while (dataReader.Read())
            {
                Usuario.Add("" + dataReader["Nombre"]);
            }

            this.CerrarConexion();

            return Usuario;
        }

        public List<String> TipoOrigen()
        {
            List<String> TipoOrigen = new List<string>();
            this.AbrirConexion();

            string sql = "SELECT * FROM  origen WHERE estado_idEstado = '1'";
            MySqlCommand cmd = new MySqlCommand(sql, objMyCon);
            MySqlDataReader dataReader = cmd.ExecuteReader();

            while (dataReader.Read())
            {
                TipoOrigen.Add("" + dataReader["Descripcion"]);
            }

            this.CerrarConexion();

            return TipoOrigen;
        }

        public List<String> TipoOperador()
        {
            List<String> TipoOperador = new List<string>();
            this.AbrirConexion();

            string sql = "SELECT * FROM  operador WHERE estado_idEstado = '1'";
            MySqlCommand cmd = new MySqlCommand(sql, objMyCon);
            MySqlDataReader dataReader = cmd.ExecuteReader();

            while (dataReader.Read())
            {
                TipoOperador.Add("" + dataReader["Descripcion"]);
            }

            this.CerrarConexion();

            return TipoOperador;
        }

        // CUENTA LA TOTALIDAD DE LOS CLIENTESD ENTRO DE LA BASE DE DATOS //

        public int TotalClientes()
        {
            this.AbrirConexion();
            string sql = "SELECT COUNT(*) FROM cliente where Estado_idEstado = '1'";
            MySqlCommand cmd = new MySqlCommand(sql, objMyCon);
            MySqlDataReader dataReader = cmd.ExecuteReader();
            int datos = 0;

            while (dataReader.Read())
            {

                datos = Convert.ToInt32(dataReader["COUNT(*)"]);
            }

            this.CerrarConexion();

            return datos;
        }

        // MUESTRA TODOS LOS CLIENTES Y RETORNA LOS DATOS COMO UNA DATATABLE //

        public DataTable DarClientes()
        {
            this.AbrirConexion();
            string sql = "SELECT  idCliente, Nombre, 1er_Apellido, 2do_Apellido, Ciudad, Barrio, Direccion, Tel_Fijo, Tel_Movil, Email, Tipo_Cliente_idTipo_Cliente, Origen_idOrigen, Detalle_Origen, Operador_idOperador FROM cliente where Estado_idEstado = '1'";
            MySqlConnection objMySqlCon = new MySqlConnection(strProvider);
            MySqlCommand cmdSel = new MySqlCommand(sql, objMySqlCon);
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            this.CerrarConexion();
            return dt;
        }

        // MUESTRA TODOS LAS GESTIONES PASANDOLE EL ID DEL CLIENTE Y RETORNA LOS DATOS COMO UNA DATATABLE //

        public DataTable DarGestion(Int64 idCliete)
        {
            this.AbrirConexion();
            string sql = "SELECT * FROM gestion where cliente_idCliente=@cliente";
            MySqlConnection objMySqlCon = new MySqlConnection(strProvider);
            MySqlCommand cmdSel = new MySqlCommand(sql, objMySqlCon);
            cmdSel.Parameters.AddWithValue("@cliente", idCliete);
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            this.CerrarConexion();
            return dt;
        }

        // Todos Los Like

        public DataTable DarClientesLikeNombre(string Nombre)
        {
            this.AbrirConexion();
            string sql = "SELECT  idCliente, Nombre, 1er_Apellido, 2do_Apellido, Ciudad, Barrio, Direccion, Tel_Fijo, Tel_Movil, Email, Tipo_Cliente_idTipo_Cliente, Origen_idOrigen, Detalle_Origen, Operador_idOperador FROM cliente where Estado_idEstado = '1' and nombre like '%"+Nombre+"%'";
            MySqlConnection objMySqlCon = new MySqlConnection(strProvider);
            MySqlCommand cmdSel = new MySqlCommand(sql, objMySqlCon);
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            this.CerrarConexion();
            return dt;
        }

        public DataTable DarClientesLike1erApellido(string PrimerApellido)
        {
            this.AbrirConexion();
            string sql = "SELECT  idCliente, Nombre, 1er_Apellido, 2do_Apellido, Ciudad, Barrio, Direccion, Tel_Fijo, Tel_Movil, Email, Tipo_Cliente_idTipo_Cliente, Origen_idOrigen, Detalle_Origen, Operador_idOperador FROM cliente where Estado_idEstado = '1' and 1er_Apellido like '%" + PrimerApellido + "%'";
            MySqlConnection objMySqlCon = new MySqlConnection(strProvider);
            MySqlCommand cmdSel = new MySqlCommand(sql, objMySqlCon);
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            this.CerrarConexion();
            return dt;
        }

        public DataTable DarClientesLike2doApellido(string SegundoApellido)
        {
            this.AbrirConexion();
            string sql = "SELECT  idCliente, Nombre, 1er_Apellido, 2do_Apellido, Ciudad, Barrio, Direccion, Tel_Fijo, Tel_Movil, Email, Tipo_Cliente_idTipo_Cliente, Origen_idOrigen, Detalle_Origen, Operador_idOperador FROM cliente where Estado_idEstado = '1' and 2do_Apellido like '%" + SegundoApellido + "%'";
            MySqlConnection objMySqlCon = new MySqlConnection(strProvider);
            MySqlCommand cmdSel = new MySqlCommand(sql, objMySqlCon);
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            this.CerrarConexion();
            return dt;
        }

        public DataTable DarClientesLikeCiudad(string Ciudad)
        {
            this.AbrirConexion();
            string sql = "SELECT  idCliente, Nombre, 1er_Apellido, 2do_Apellido, Ciudad, Barrio, Direccion, Tel_Fijo, Tel_Movil, Email, Tipo_Cliente_idTipo_Cliente, Origen_idOrigen, Detalle_Origen, Operador_idOperador FROM cliente where Estado_idEstado = '1' and Ciudad like '%" + Ciudad + "%'";
            MySqlConnection objMySqlCon = new MySqlConnection(strProvider);
            MySqlCommand cmdSel = new MySqlCommand(sql, objMySqlCon);
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            this.CerrarConexion();
            return dt;
        }

        public DataTable DarClientesLikeBarrio(string Barrio)
        {
            this.AbrirConexion();
            string sql = "SELECT  idCliente, Nombre, 1er_Apellido, 2do_Apellido, Ciudad, Barrio, Direccion, Tel_Fijo, Tel_Movil, Email, Tipo_Cliente_idTipo_Cliente, Origen_idOrigen, Detalle_Origen, Operador_idOperador FROM cliente where Estado_idEstado = '1' and Barrio like '%" + Barrio + "%'";
            MySqlConnection objMySqlCon = new MySqlConnection(strProvider);
            MySqlCommand cmdSel = new MySqlCommand(sql, objMySqlCon);
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            this.CerrarConexion();
            return dt;
        }

        public DataTable DarClientesLikeDireccion(string Direccion)
        {
            this.AbrirConexion();
            string sql = "SELECT  idCliente, Nombre, 1er_Apellido, 2do_Apellido, Ciudad, Barrio, Direccion, Tel_Fijo, Tel_Movil, Email, Tipo_Cliente_idTipo_Cliente, Origen_idOrigen, Detalle_Origen, Operador_idOperador FROM cliente where Estado_idEstado = '1' and Direccion like '%" + Direccion + "%'";
            MySqlConnection objMySqlCon = new MySqlConnection(strProvider);
            MySqlCommand cmdSel = new MySqlCommand(sql, objMySqlCon);
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            this.CerrarConexion();
            return dt;
        }

        public DataTable DarClientesLikeTelfijo(string Telfijo)
        {
            this.AbrirConexion();
            string sql = "SELECT  idCliente, Nombre, 1er_Apellido, 2do_Apellido, Ciudad, Barrio, Direccion, Tel_Fijo, Tel_Movil, Email, Tipo_Cliente_idTipo_Cliente, Origen_idOrigen, Detalle_Origen, Operador_idOperador FROM cliente where Estado_idEstado = '1' and Tel_Fijo like '%" + Telfijo + "%'";
            MySqlConnection objMySqlCon = new MySqlConnection(strProvider);
            MySqlCommand cmdSel = new MySqlCommand(sql, objMySqlCon);
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            this.CerrarConexion();
            return dt;
        }

        public DataTable DarClientesLikeTelMovil(string Tel_Movil)
        {
            this.AbrirConexion();
            string sql = "SELECT  idCliente, Nombre, 1er_Apellido, 2do_Apellido, Ciudad, Barrio, Direccion, Tel_Fijo, Tel_Movil, Email, Tipo_Cliente_idTipo_Cliente, Origen_idOrigen, Detalle_Origen, Operador_idOperador FROM cliente where Estado_idEstado = '1' and Tel_Movil like '%" + Tel_Movil + "%'";
            MySqlConnection objMySqlCon = new MySqlConnection(strProvider);
            MySqlCommand cmdSel = new MySqlCommand(sql, objMySqlCon);
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            this.CerrarConexion();
            return dt;
        }

        public DataTable DarClientesLikeEmail(string Email)
        {
            this.AbrirConexion();
            string sql = "SELECT  idCliente, Nombre, 1er_Apellido, 2do_Apellido, Ciudad, Barrio, Direccion, Tel_Fijo, Tel_Movil, Email, Tipo_Cliente_idTipo_Cliente, Origen_idOrigen, Detalle_Origen, Operador_idOperador FROM cliente where Estado_idEstado = '1' and Email like '%" + Email + "%'";
            MySqlConnection objMySqlCon = new MySqlConnection(strProvider);
            MySqlCommand cmdSel = new MySqlCommand(sql, objMySqlCon);
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            this.CerrarConexion();
            return dt;
        }

        public void IngresarGestion(Int64 Usuario, Int64 Cliente, String Gestion, String Observaciones)
        {
            this.AbrirConexion();
            string sql = "INSERT INTO gestion (idGestion, FechaHora, Descripcipon, Observacion, cliente_idCliente, usuario_idUsuario, estado_idEstado) VALUES (NULL, @Fecha, @Gestion, @Observaciones, @Cliente, @Usuario, '1');";
            MySqlCommand cmd = new MySqlCommand(sql, objMyCon);
            cmd.Parameters.AddWithValue("@Gestion", Gestion);
            cmd.Parameters.AddWithValue("@Observaciones", Observaciones);
            cmd.Parameters.AddWithValue("@Cliente", Cliente);
            cmd.Parameters.AddWithValue("@Fecha", Convert.ToDateTime(string.Format("{0:G}", DateTime.Now)));
            cmd.Parameters.AddWithValue("@Usuario", Usuario);
            cmd.ExecuteNonQuery();
            this.CerrarConexion();
        }

        public void IngresarGestion(Int64 Usuario, Int64 Cliente, String Gestion, String Observaciones, string Mail, string Correo, string Visita, string Asistencia, string Seguimiento, string Lugar, String Fecha2)
        {
            this.AbrirConexion();
            string sql = "INSERT INTO gestion (idGestion, FechaHora, Descripcipon, Observacion, Mail, Correo, Visita, Asistencia, Seguimiento, Fecha, Lugar, cliente_idCliente, usuario_idUsuario, estado_idEstado) VALUES (NULL, @Fecha, @Gestion, @Observaciones,  @Mail,  @Correo,  @Visita, @Asistencia, @Seguimiento, @Fecha2, @Lugar, @Cliente, @Usuario, '1');";
            //string sql = "INSERT INTO gestion (idGestion, FechaHora, Descripcipon, Observacion, cliente_idCliente, usuario_idUsuario, estado_idEstado) VALUES (NULL, @Fecha, @Gestion, @Observaciones,  @Cliente, @Usuario, '1');";
            MySqlCommand cmd = new MySqlCommand(sql, objMyCon);
            cmd.Parameters.AddWithValue("@Gestion", Gestion);
            cmd.Parameters.AddWithValue("@Observaciones", Observaciones);
            cmd.Parameters.AddWithValue("@Cliente", Cliente);
            cmd.Parameters.AddWithValue("@Fecha", Convert.ToDateTime(string.Format("{0:G}", DateTime.Now)));
            if (Fecha2 != null)
            {
                cmd.Parameters.AddWithValue("@Fecha2", Convert.ToDateTime(string.Format("{0:G}", Fecha2)));
            }
            else
            {
                cmd.Parameters.AddWithValue("@Fecha2", Fecha2);
            }
            cmd.Parameters.AddWithValue("@Mail", Mail);
            cmd.Parameters.AddWithValue("@Correo", Correo);
            cmd.Parameters.AddWithValue("@Visita", Visita);
            cmd.Parameters.AddWithValue("@Asistencia", Asistencia);
            cmd.Parameters.AddWithValue("@Seguimiento", Seguimiento);
            cmd.Parameters.AddWithValue("@Lugar", Lugar);
            cmd.Parameters.AddWithValue("@Usuario", Usuario);
            cmd.ExecuteNonQuery();
            this.CerrarConexion();
        }    

        public void IngresarCliente(string Detalle_Origen, string nombre, string apellido1, string apellido2, string ciudad, string barrio, string direccion, string telefono, string movil, string email, int tipo, int origen)
        {
            this.AbrirConexion();

            string sql = "INSERT INTO cliente (idCliente, Detalle_Origen, Nombre, 1er_Apellido, 2do_Apellido, Ciudad, Barrio, Direccion, Tel_Fijo, Tel_Movil, Email, Tipo_Cliente_idTipo_Cliente, Estado_idEstado, Origen_idOrigen, Operador_idOperador) VALUES (NULL, @dato1, @dato2, @dato3, @dato4, @dato5, @dato6, @dato7, @dato8, @dato9, @dato10,  @dato11,'1', @dato12, '5'); ";
            MySqlCommand cmd = new MySqlCommand(sql, objMyCon);
            cmd.Parameters.AddWithValue("@dato1", Detalle_Origen);
            cmd.Parameters.AddWithValue("@dato2", nombre);
            cmd.Parameters.AddWithValue("@dato3", apellido1);
            cmd.Parameters.AddWithValue("@dato4", apellido2);
            cmd.Parameters.AddWithValue("@dato5", ciudad);
            cmd.Parameters.AddWithValue("@dato6", barrio);
            cmd.Parameters.AddWithValue("@dato7", direccion);
            cmd.Parameters.AddWithValue("@dato8", telefono);
            cmd.Parameters.AddWithValue("@dato9", movil);
            cmd.Parameters.AddWithValue("@dato10", email);
            cmd.Parameters.AddWithValue("@dato11", tipo);
            cmd.Parameters.AddWithValue("@dato12", origen);
            cmd.ExecuteNonQuery();


            this.CerrarConexion();
        }

        public void UpdateCliente(string nombre, string apellido1, string apellido2, string ciudad, string barrio, string direccion, string telefono, string movil, string email, int tipo, Int64 idCliente, int origen, string Detalle_Origen)
        {
            this.AbrirConexion();

            string sql = "UPDATE cliente SET Nombre = @dato3, 1er_Apellido = @dato4, 2do_Apellido = @dato5, Ciudad = @dato6, Barrio = @dato7, Direccion = @dato8, Tel_Fijo = @dato9, Tel_Movil = @dato10, Email = @dato11, Tipo_Cliente_idTipo_Cliente = @dato12,Detalle_Origen = @dato14,Origen_idOrigen = @dato15 where idCliente = @dato13;";
            MySqlCommand cmd = new MySqlCommand(sql, objMyCon);

            cmd.Parameters.AddWithValue("@dato3", nombre);
            cmd.Parameters.AddWithValue("@dato4", apellido1);
            cmd.Parameters.AddWithValue("@dato5", apellido2);
            cmd.Parameters.AddWithValue("@dato6", ciudad);
            cmd.Parameters.AddWithValue("@dato7", barrio);
            cmd.Parameters.AddWithValue("@dato8", direccion);
            cmd.Parameters.AddWithValue("@dato9", telefono);
            cmd.Parameters.AddWithValue("@dato10", movil);
            cmd.Parameters.AddWithValue("@dato11", email);
            cmd.Parameters.AddWithValue("@dato12", tipo);
            cmd.Parameters.AddWithValue("@dato13", idCliente);
            cmd.Parameters.AddWithValue("@dato14", Detalle_Origen);
            cmd.Parameters.AddWithValue("@dato15", origen);
            cmd.ExecuteNonQuery();
            this.CerrarConexion();
        }

        public void IngresarOrigen(String Origen)
        {
            this.AbrirConexion();
            string sql = "INSERT INTO origen (idOrigen, Descripcion, estado_idEstado) VALUES (NULL, @Origen,'1');";
            MySqlCommand cmd = new MySqlCommand(sql, objMyCon);
            cmd.Parameters.AddWithValue("@Origen", Origen);
            cmd.ExecuteNonQuery();
            this.CerrarConexion();
        }

        public DataTable DarGestionFechas(String Fecha1, String Fecha2, int Usuario)
        {
            this.AbrirConexion();
            string sql = "";
            if (Usuario == 0)
            {
              sql = "Select * From cliente INNER JOIN gestion ON idCliente  = cliente_idCliente  where FechaHora >= @Fecha1 AND FechaHora < @Fecha2";
            }
            else
            {
              sql = "Select * From cliente INNER JOIN gestion ON idCliente  = cliente_idCliente  where FechaHora >= @Fecha1 AND FechaHora <@Fecha2 AND usuario_idUsuario = @Usuario";
            }

            MySqlConnection objMySqlCon = new MySqlConnection(strProvider);
            MySqlCommand cmdSel = new MySqlCommand(sql, objMySqlCon);
            cmdSel.Parameters.AddWithValue("@Fecha1", Convert.ToDateTime(string.Format("{0:G}", Fecha1)));
            cmdSel.Parameters.AddWithValue("@Fecha2", Convert.ToDateTime(string.Format("{0:G}", Fecha2)));
            if (Usuario != 0)
            {
                cmdSel.Parameters.AddWithValue("@Usuario", Usuario);
            }
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            this.CerrarConexion();
            return dt;
        }

        public DataTable DarGestionCampos(String Fecha1, String Fecha2, int Campo)
        {
            this.AbrirConexion();
            string sql = "";
            switch (Campo)
            {
                case 0:
                    sql = "Select * From cliente INNER JOIN gestion ON idCliente  = cliente_idCliente  where Fecha >= @Fecha1 AND Fecha < @Fecha2 OR Mail = 'x' OR Correo = 'x' OR  Visita = 'x' OR Asistencia = 'x' OR Seguimiento = 'x'";
                    break;
                case 1:
                    sql = "Select * From cliente INNER JOIN gestion ON idCliente  = cliente_idCliente  where Fecha >= @Fecha1 AND Fecha < @Fecha2 AND Mail = 'x'";
                    break;
                case 2:
                    sql = "Select * From cliente INNER JOIN gestion ON idCliente  = cliente_idCliente  where Fecha >= @Fecha1 AND Fecha < @Fecha2 AND Correo = 'x'";
                    break;
                case 3:
                    sql = "Select * From cliente INNER JOIN gestion ON idCliente  = cliente_idCliente  where Fecha >= @Fecha1 AND Fecha < @Fecha2 AND Visita = 'x'";
                    break;
                case 4:
                    sql = "Select * From cliente INNER JOIN gestion ON idCliente  = cliente_idCliente  where Fecha >= @Fecha1 AND Fecha < @Fecha2 AND Asistencia = 'x'";
                    break;
                case 5:
                    sql = "Select * From cliente INNER JOIN gestion ON idCliente  = cliente_idCliente  where Fecha >= @Fecha1 AND Fecha < @Fecha2 AND Seguimiento = 'x'";
                    break;
            }

            MySqlConnection objMySqlCon = new MySqlConnection(strProvider);
            MySqlCommand cmdSel = new MySqlCommand(sql, objMySqlCon);
            cmdSel.Parameters.AddWithValue("@Fecha1", Convert.ToDateTime(string.Format("{0:G}", Fecha1)));
            cmdSel.Parameters.AddWithValue("@Fecha2", Convert.ToDateTime(string.Format("{0:G}", Fecha2)));
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmdSel);
            da.Fill(dt);
            this.CerrarConexion();
            return dt;
        }
    }
}
